package smallfrench.moteur.biblio.err;

import smallfrench.moteur.biblio.AClasse;
import smallfrench.moteur.biblio.AnnotationMembre;
import smallfrench.moteur.biblio.RRien;
import smallfrench.moteur.interp.err.RException;
import smallfrench.moteur.lexer.Position;

/**
 * Doit survenir lorsque qu’un script tente d’utiliser <code>RRien.RIEN</code>
 * là où un objet est requis.
 * 
 * @author antoine1023
 *
 */
public class ErreurRien extends AException {

	public static final AClasse CLASSE = AClasse.creer(ErreurRien.class);

	@AnnotationMembre
	public ErreurRien() {
		super("\"rien\" inattendu.");
	}

	public static RException nouvelleException() {
		return new RException(new ErreurRien());
	}

	public static RException nouvelleException(Position position) {
		ErreurRien er = new ErreurRien();
		er.ajouterPosition(position);
		return new RException(er);
	}

	/**
	 * Vérifie que o est différent de <code>null</code> et de
	 * <code>RRien.RIEN</code>.
	 * 
	 * @param position
	 * @param o
	 * @throws RException Si o est <code>null</code> ou à
	 * <code>RRien.RIEN</code>.
	 */
	public static void assertion(Position position, Object o)
			throws RException {

		if (o == null || o == RRien.RIEN) {
			ErreurRien er = new ErreurRien();
			er.ajouterPosition(position);
			throw new RException(er);
		}
	}
}
